package common.model.Entity.libraryEntity.enums;

/**
 * 图书在馆藏系统中的状态枚举。
 *
 * <p>与数据库字段 {@code status} 整数代码显式映射，保证序列化/反序列化一致性。</p>
 */

public enum BookStatus {

    /**
     * 可借阅（在馆，未被借出）
     */
    AVAILABLE(0),

    /**
     * 已被借出，不在馆
     */
    BORROWED(1),

    /**
     * 已被预约，等待取书
     */
    RESERVED(2);


    /**
     * 数据库中存储的整数代码。
     */
    private final int code;

    /**
     * 构造器
     * @param code 数据库整数代码
     */
    BookStatus(int code) {
        this.code = code;
    }

    /**
     * 根据字符串值获取对应的 BookStatus 枚举
     * @param value 字符串值
     * @return 对应的 BookStatus，若无匹配则返回 null
     */
    public static BookStatus fromString(String value) {
        if (value != null) {
            for (BookStatus status : BookStatus.values()) {
                if (status.name().equalsIgnoreCase(value)) {
                    return status;
                }
            }
        }
        return null;
    }

    /**
     * 根据数据库整数值获取对应的 BookStatus 枚举
     * @param status 数据库中存储的整数值
     * @return 对应的 BookStatus 枚举，如果值无效则返回 null
     */
    public static BookStatus fromCode(int status) {
        switch (status) {
            case 0: return AVAILABLE;
            case 1: return BORROWED;
            case 2: return RESERVED;
            default: return null;
        }
    }
    /**
     * 获取与该枚举常量关联的整数代码。
     * * @return 对应的整数代码，用于数据库存储。
     */
    public int getCode() {
        return code;
    }
}
